//并不是手写题, 只是为了理解fiber架构
//schedule 空闲调度
let nextFiberReconcileWork = null
let wipRoot = null

function workLoop(deadline) {
    let sholdYield = false
    while(nextFiberReconcileWork && !sholdYield) {
        nextFiberReconcileWork = performNextWork(nextFiberReconcileWork)
        sholdYield = deadline.timeRemaining() < 1
    }

    if(!nextFiberReconcileWork) commitRoot()

    requestIdleCallback(workLoop)
}

requestIdleCallback(workLoop)

//schedule就是在空闲时调度每个fiber的reconcile, 全部reconcile就commit

//reconcile 调和
function performNextWork(fiber) {
    reconcile(fiber)

    if(fiber.child) return fiber.child

    let nextFiber = fiber
    while(nextFiber) {
        if(nextFiber.sibing) {
            return nextFiber.sibing
        }
        nextFiber = nextFiber.return
    }
}

//reconcile负责vdom转fiber, 还会做两件事, 提前创建dom节点, diff, 通过schedule调度, 最终转成整个fiber链表
function reconcile() {

}

//转完进入commit
//因为reconcile阶段已经创建好了dom, 所以更新很快

//总结
//jsx编译成render function, 继而产生vdom
//vdom转fiber, 这个过程叫reconcile
//fiber是一个链表结构, 这样可以通过requestIdleCallback空闲时调度reconcile, 直到处理完vdom
//最后commit